package com.zyh.demo;

import com.zyh.utils.JDBCUtil;
import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

/**
 * @Author zyh
 * @Date 2024/8/23 11:08
 * @Description 批量删除
 */

public class JDBCDemo2 {
    @Test
    public void test1() throws SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            // 创建连接
            connection = JDBCUtil.getConnection();
            // 定义 sql
            String sql = "delete from user where id=?";
            // 创建预编译 sql 对象
            ps = connection.prepareStatement(sql);
            // 将要删除的 id 存入集合
            List<Integer> idList = Arrays.asList(10);
            // 关闭自动提交事务
            connection.setAutoCommit(false);
            // 循环封装 sql
            for (Integer id : idList) {
                ps.setObject(1, id);
                // 将每一次循环封装好的 ps 对象存入事务管理批处理容器
                ps.addBatch();
            }
            // 将事务管理批处理容器中所有 sql 一次性发送并执行，得到返回结果集合
            int[] ints = ps.executeBatch();
            // 定义计数器
            int count = 0;
            // 遍历结果集合
            for (int item : ints) {
                if (item == 1) {
                    count++;
                } else {
                    throw new SQLException("删除的id不正确");
                }
            }
            System.out.println("删除成功，共删除" + count + "条数据");
            connection.commit();
        } catch (SQLException e) {
            // 如有异常则进行事务回滚
            connection.rollback();
            e.printStackTrace();
        } finally {
            // 关闭资源
            JDBCUtil.close(ps, connection);
        }
    }
}
